#include <REGX52.H>
#include "Delay.h"

/**
  * @brief  数码管显示数组
  * @param  无
  * @retval 无
  */
int arr[] = 
{	
	0x3F,0x06,0x5B,0x4F,0x66,//0~4
	0x6D,0x7D,0x07,0x7F,0x6F,//5~9
	0x77,0x7C,0x39,0x5E,0x79,0x71,//A~F
	0x00,//全灭
	0x40,//显示“-”
};

/**
  * @brief  数码管状态显示数组，Nixie_arr[1~8]分别对应八个数码管及其显示状态
  * @param  无
  * @retval 无
  */
unsigned char Nixie_arr[9]={0,16,16,16,16,16,16,16,16};//16表示全灭


/**
  * @brief  数码管显示调用函数 通过修改状态数组实现
  * @param  a 显示数字的位置 范围：1~8 从左到右
  * @param  b 要显示的数字 范围：0~16 输出16进制数，16为全灭
  * @retval 无
  */
void Nixie(int a,int b)
{
	Nixie_arr[a] = b;
}


/**
* @brief  数码管显示控制函数  需要不断扫描实现显示 因此通过LOOP循环
  * @param  a 显示数字的位置 范围：1~8 从左到右
	* @param	b 要显示的数字 范围：0~16 输出16进制数，16为全灭
  * @retval 无
  */
void Nixie_Show(int a,int b)
{
	P0 = 0x00;
	switch(a)
	{
		case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break;
		case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break;
		case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break;
		case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break;
		case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break;
		case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break;
		case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break;
		case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break;		
	}
	P0 = arr[b];//在一次调用结束后，LOOP函数在定时器中会延迟
}

/**
  * @brief  数码管循环状态捕获
  * @param  无
  * @retval 无 会持续显示 Nixie_arr[i]数组数码管的状态
  */
void Nixie_Loop()
{
	static unsigned char i=1;
	Nixie_Show(i,Nixie_arr[i]);//不断扫描，在第i位显示
	i++;
	if(i>8){i=1;}
}